﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using YasharEl.Infrastructure.EntityModel;
using YasharEl.Infrastructure.Core.Users;
using YasharEl.Infrastructure.Core.Prototype;
using YasharEl.Infrastructure.Core.Commenting;

namespace YasharEl.Infrastructure.ProcessEngine
{
    public interface IProcess : IAggregateRoot<long>, IPrototypeEntity, ICommentable
    {
        long ProcessId { get; set; }

        DateTime CreatedDate { get; set; }
        IProcessParticipant CreatedBy { get; set; }

        IProcessParticipant Owner { get; set; }

        DateTime? ModifiedDate { get; set; }
        IProcessParticipant ModifiedBy { get; set; }

        DateTime? StartedDate { get; set;  }
        DateTime ExpiredDate { get; set; }

        DateTime? ClosedDate { get; set; }
        IProcessParticipant ClosedBy { get; set; }

        IProcessDefinition ProcessDefinition { get; set; }

        ProcessStatus ProcessStatus { get; set; }
        ProcessPriority ProcessPriority { get; set; }

        Guid WorkflowInstanceId { get; set; }
        //Version WorkflowInstanceVersion { get; set; }
        //string WorkflowInstanceName { get; set; }
        //string WorkflowInstancePackage { get; set; }

        // TODO: Process status reason
        // TODO: Attached documents
        // TODO: Uploaded letters
        // TODO: Versioning
        // TODO: History
    }
}
